package com.wesley.growth.leetcode.array;

/**
 * <p>
 *  给定一个已按照升序排列的有序数组，找到两个数使得它们相加之和等于目标数。
 *  函数应该返回这两个下标值 index1 和 index2，其中 index1 必须小于 index2。
 *
 *  说明:
 *      返回的下标值（index1 和 index2）不是从零开始的。
 *      你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。
 * </p>
 * 返回的下标值（index1 和 index2）不是从零开始的。
 * 你可以假设每个输入只对应唯一的答案，而且你不可以重复使用相同的元素。
 *
 * @author Created by Yani on 2019/11/19
 */
public class Solution167 {

    /**
     * 对撞指针方法
     */
    public int[] twoSum(int[] numbers, int target) {
        // 第一个索引位置
        int left = 0;
        // 最后一个索引位置
        int right = numbers.length - 1;

        while (left < right) {
            int temp = numbers[left] + numbers[right];
            if (temp == target) {
                return new int[]{left + 1, right + 1};
            }

            if (temp > target) {
                right--;
            }else{
                left ++;
            }
        }

        throw new IllegalArgumentException("参数无解");
    }

}
